Skip to main content

1. 构建智能体与工具调用

Written: 2026.06

2. LangGraph环境搭建

2.1 安装 LangGraph

安装 LangGraph

2.2 接入大模型

LangGraph底层依赖LangChain,接入大模型与 LangChain 完全一致,具体可参考文档https://www.cuiliangblog.cn/detail/section/228757095

3. 创建LangGraph智能体

3.1 预构建智能体API简介

LangGraph 提供了四组“预构建图”级别的 Agent API,用户无需自己拼节点、连边,只要给模型和工具即可一键拿到一个可运行、可观测、带记忆的图 其中 React Agent(Reason + Act)是使用最多的一种经典的推理–执行型智能体模式:先思考(Reason),再选择动作(Act)

3.2 接入自定义工具函数

LangGraph接入工具函数类别和LangChain一样有三类:LangChain内置的工具函数、自定义工具函数和使用MCP工具。我们这里通过自定义工具函数进行演示
  1. 创建自定义获取天气信息的工具函数,为了更加严谨,我们使用pydantic库定义一个对象类型描述传入参数,这里表示要传入的是一个字符串 city 参数,表示的含义是城市名称。定义的WeatherQuery对象在@tool(args_schema=WeatherQuery)中约束get_weather的函数参数。tool装饰器可以将自定义函数修饰为LangChain/LangGraph的函数工具, 注意函数的注释必须要撰写清楚才能使大模型理解函数功能
自定义工具函数(tools.py)示例
执行结果如下
  1. 创建 LangGraph 智能体。初始化大模型和函数列表并创建ReACT预制图结构并构建智能体
创建 ReAct 智能体示例
执行结果如下
观察智能体输出的消息列表,就是Function Calling的基本流程,大模型根据用户的提问从工具函数列表中选取适当的函数并自动生成函数参数,调用函数生成的结果再反馈给大模型生成最终的回复结果

3.3 LangGraph ReACT图结构浅析

LangGraph框架是通过Nodes(点)和Edges(边)的组合去创建复杂的循环工作流程,通过消息传递的方式串联所有节点形成一个通路。为了维持消息能够及时的更新并能够在节点中反复传递,则LangGraph构建了 State状态 的概念。每启动一个LangGraph构建流都会生成一个状态,图中的节点在处理时会传递和修改该状态。整个状态不仅仅是一组静态数据,更是根据每个节点的输出动态更新的,然后影响循环内的后续操作
LangGraph 状态流转示意图

LangGraph 状态流转示意图

上图展示了ReACT图结构,ReACT是Reason(推理)和Act(行动)的缩写,它的工作流程是一个循环图:思考->行动->观察结果->再思考…->得出答案。正如上图所示,ReACT图具体流程如下:
1

开始

接收用户的输入
2

调用模型

将当前状态传递给大模型,要求模型思考
3

模型决策

大模型会以特定格式返回一个响应,这个响应可能是:
  • 最终答案:如果模型认为信息足够,就直接回答用户
  • 工具调用:如果模型认为需要更多信息,它会决定调用哪个工具
4

执行工具

如果模型决定调用工具,图就会执行该工具,并获取工具返回的结果
5

更新状态

将工具的执行结果添加到状态中
6

循环

带着新的信息回到第2步,让模型再次思考
7

结束

当模型返回最终答案时,循环结束,图运行完成将结果返回给用户

4. ReAct Agent 外部工具调用形式

4.1 添加多个工具函数

添加get_weatherwrite_file两个工具函数,分别用来查询天气和保存内容至文件。完整的项目代码如下:
多个工具函数示例

4.2 工具并联调用

测试ReAct图智能体的工具并联调用,同时查询北京和杭州的天气
工具并联调用示例
执行结果如下
从执行结果看,ReAct图智能体同时调用了get_weather工具函数分别查询北京和杭州的天气状况

4.3 工具串联调用

同时查询北京和上海天气,并将结果保存到文件中
工具串联调用示例
执行结果如下

5. ReAct智能体内部工具调用

5.1 LangChain内置工具

对于LangGraph智能体来说,除了能够灵活自如自定义工具,还能够接入LangChain丰富的内置工具快速完成智能体的开发 在 LangChain 框架中,工具是实现语言模型与外部世界交互的关键机制。LangChain提供了大量内置与可扩展的工具接口,使得智能体能够执行函数调用、访问 API、查询搜索引擎、调用数据库等任务,从而超越纯语言生成的能力,真正实现“能行动的智能体”。LangChain 官方文档将这些工具按照其用途进行了模块化划分,大家可参考官网https://python.langchain.com/docs/integrations/tools/

5.2 创建带搜索功能的Agent

以常用免费的 google 搜索为例演示如何实现联网搜索功能 登录https://serper.dev/,注册账号获取 api 密钥,并添加到.env 文件中。代码如下:
搜索 Agent 示例
执行结果如下,可以看到ReAct智能体成功调用了搜索引擎搜索到我们需要的内容:
执行结果如下